/******************************************************************************
 * Copyright (C) ShenZhen Powerdata Information Technology Co.,Ltd
 * All Rights Reserved.
 * 本软件为深圳市博安达信息技术股份有限公司开发研制。未经本公司正式书面同意，其他任何个人、团体不得使用、
 * 复制、修改或发布本软件.
 *****************************************************************************/

package com.szboanda.business.workflow.service;



import com.szboanda.business.workflow.exception.WorkflowException;

import java.util.List;
import java.util.Map;

/**
 * @title: 流程处理意见_业务接口类
 * @fileName: WorkflowService.java
 * @description:
 * @copyright: PowerData Software Co.,Ltd. Rights Reserved.
 * @company: 深圳市博安达信息技术股份有限公司
 * @author: 原晋川
 * @date: 2019-08-23 15:37
 * @version: V1.0
 */
public interface IWorkflowService {

    /**
     * 查询【流程处理意见】业务信息
     *
     * @param modelInfo 业务Map集合
     * @return 返回业务集合
     * @throws WorkflowException
     */
    Map<String, Object> queryWorkflows(Map<String, Object> modelInfo) throws WorkflowException;

    /**
     * 根据流程号查询当前的流程节点
     *
     * @param params
     * @return
     */
    Map<String, Object> queryCurrentStepByInstanceid(String params);

    /**
     * 根据流程号查询该流程开启节点的节点ID
     *
     * @param params
     * @return
     */
    Map<String, Object> queryFirstStepByInstanceid(String params);

    /**
     * 查询指定流程的当前步骤序号及流程对应的业务ID和业务表名
     *
     * @param params {
     *               LCBH,LCDYBH
     *               }
     * @return
     * @throws WorkflowException
     */
    Map<String, Object> queryCurrentStepAndBusinessTableByInstanceId(Map<String, Object> params) throws WorkflowException;

    /**
     * 删除指定表的指定数据
     *
     * @param params {
     *               TABLE,YWXTBH
     *               }
     * @return
     * @throws WorkflowException
     */
    int deleteBusinessDataByTableAndInstanceId(Map<String, Object> params) throws WorkflowException;

    /**
     * 查询指定用户是否关注指定流程
     *
     * @param userId     用户ID
     * @param workflowId 工作流程实例ID
     * @return 是否关注，true：已关注，false：未关注
     */
    boolean isAttention(String userId, String workflowId);

    /**
     * 设置指定用户关注指定流程
     *
     * @param userId     用户ID
     * @param workflowId 工作流程实例ID
     * @return 执行结果：true：成功， false：失败
     */
    boolean setAttention(String userId, String workflowId);

    /**
     * 取消指定用户对指定流程的关注
     *
     * @param userId     用户ID
     * @param workflowId 工作流程实例ID
     * @return 执行结果：true：成功， false：失败
     */
    boolean cancelAttention(String userId, String workflowId);

    /**
     * 查询业务流程类型集合
     *
     * @return
     */
    List<Map<String, Object>> queryWorkflowTypeMap();

    /**
     * 查询业务流程分阅人员
     *
     * @param params
     * @return
     */
    String queryCopyReaders(Map<String, Object> params);
}